// -------------------------------------------------------------------------
// Copyright (c) 2000-2009 Ufinity. All Rights Reserved.
//
// This software is the confidential and proprietary information of
// Ufinity
//
// Original author: lxt
//
// -------------------------------------------------------------------------
// UFINITY MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
// THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
// TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
// PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UFINITY SHALL NOT BE
// LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING,
// MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
//
// THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE
// CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE
// PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT
// NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE
// SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE
// SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE
// PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). UFINITY
// SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR
// HIGH RISK ACTIVITIES.
// -------------------------------------------------------------------------

package com.ufinity.estimation.service.impl;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.springframework.dao.DataAccessException;

import com.cn.ufinity.common.log.LoggerFactory;
import com.ufinity.estimation.persistence.ServiceException;
import com.ufinity.estimation.persistence.domain.SystemSetting;
import com.ufinity.estimation.service.SystemSettingService;

/**
 * Description of the class
 * 
 * @author lxt
 * @version 1.0
 * @since 2009-12-14
 */

public class SystemSettingServiceImpl extends
        BaseServiceImpl<SystemSetting, Long> implements SystemSettingService {
    public SystemSettingServiceImpl() {
        super(LoggerFactory.getPersistenceLog(SystemSettingServiceImpl.class),
                SystemSetting.class);
    }

    @Override
    public void updateSystemSetting(Map<String, String> systemSetting) {
        Iterator<Entry<String, String>> entryIterator = systemSetting
                .entrySet().iterator();

        while (entryIterator.hasNext()) {
            Entry<String, String> entry = entryIterator.next();
            
            SystemSetting result = findSystemSettingByKey(entry.getKey());
            logger.info("updateSystemSetting", entry.getKey() + "=" + entry.getValue());
            if (result == null) {
                result = new SystemSetting();
                result.setKey(entry.getKey());
                result.setValue(entry.getValue());
                saveEntity(result);
            } else {
                result.setKey(entry.getKey());
                result.setValue(entry.getValue());
                updateEntity(result);
            }
        }
    }

    @SuppressWarnings("unchecked")
	public SystemSetting findSystemSettingByKey(String key) {
            String method = "getUserByUserName";
            logger.info(method,
                    "get user from database by key="
                            + key);
            String hql = "from SystemSetting as s where s.key = ?";
            SystemSetting entity = null;

            try {
                List<SystemSetting> entityList = getHibernateTemplate().find(hql,
                        new Object[] { key });
                if (!entityList.isEmpty()) {
                    entity = (SystemSetting) entityList.get(0);
                }
                return entity;
            } catch (DataAccessException e) {
                String errorMessage = "an error occurs during find system setting by key: " + key;
                logger.error(method, errorMessage + e);
                throw new ServiceException(errorMessage, e);
            }
    }
}
